package com.blog.cmrpersonalblog.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 敏感词实体类
 */
@Data
@TableName("sensitive_word")
public class SensitiveWord {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 敏感词内容
     */
    @TableField("word")
    private String word;

    /**
     * 敏感词类型
     */
    @TableField("type")
    private String type;

    /**
     * 严重程度（1-5）
     */
    @TableField("severity")
    private Integer severity;

    /**
     * 过滤模式：REPLACE-替换为***，BLOCK-直接拦截
     */
    @TableField("filter_mode")
    private String filterMode;

    /**
     * 替换文本（当filter_mode为REPLACE时使用）
     */
    @TableField("replacement")
    private String replacement;

    /**
     * 是否启用 0-禁用 1-启用
     */
    @TableField("status")
    private Integer status;

    /**
     * 描述信息
     */
    @TableField("description")
    private String description;

    /**
     * 分类标签（JSON格式）
     */
    @TableField("tags")
    private String tags;

    /**
     * 匹配次数统计
     */
    @TableField("match_count")
    private Long matchCount;

    /**
     * 最后匹配时间
     */
    @TableField("last_match_time")
    private LocalDateTime lastMatchTime;

    /**
     * 创建人ID
     */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private Long createBy;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新人ID
     */
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private Long updateBy;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 是否启用
     */
    public boolean isEnabled() {
        return status != null && status == 1;
    }

    /**
     * 是否为替换模式
     */
    public boolean isReplaceMode() {
        return "REPLACE".equals(filterMode);
    }

    /**
     * 是否为拦截模式
     */
    public boolean isBlockMode() {
        return "BLOCK".equals(filterMode);
    }

    /**
     * 获取实际替换文本
     */
    public String getActualReplacement() {
        if (isReplaceMode() && replacement != null && !replacement.trim().isEmpty()) {
            return replacement;
        }
        return "*".repeat(word != null ? word.length() : 3);
    }
}